<!--

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->
<html><head><title>The NetBeans look and feel customization library</title></head><body>

This library installs custom values into UIDefaults, such as colors, borders and UI class names, which
various components in NetBeans use to provide a customized or native appearance.
<p>
NetBeans provides a number of custom components, such as the tabbed containers in its main window;
other components may look for custom colors - for example, the property sheet will look for a custom color
in UIDefaults to use for its margin and the background color of property set entries, in order that it may
be customized to match the UI specification for different platforms/look and feels.
<p>
This library centralizes the installation and setup of such custom values.  It also:
<ul>
<li>Handles the setup of custom font sizes for look and feels (other than GTK, which
gets its font sizes from the operating system theme), by replacing the font entries in UIDefaults with those
of the requested font size</li>
<li>Allows UIDefaults values to be guaranteed to be present for look and feels (GTK) which do not
provide them, to enable older code that depends on such values being there (as they were for all look
and feels until JDK 1.4) to work without modification</li>
<li>Handles loading of a theme file for those look and feels (Metal) that support MetalTheme</li>
<li>Installs per-look-and-feel customizations needed to ensure a harmonious, native appearance on a
      given look and feel</li>
<li>Contains custom implementations of things like ToolbarUI for some platforms on which 
      NetBeans does not use the standard JDK implementation (GTK and Aqua).</li>
</ul>

<h2>Usage</h2>
An application using NetBeans tab control, window system, property sheet or some other component
of NetBeans, which wants to guarantee that the same colors and styles are used in their application as in
NetBeans, needs simply to call <code>org.netbeans.swing.plaf.Startup.run()</code> early in its startup
sequence, as <code>org.netbeans.core.Main</code> does.
<p>
A look and feel or application author who wishes to provide custom values for some thing can provide
an implementation of <code>org.netbeans.swing.plaf.LFCustoms</code>, and place it in UIManager under
a key which contains the unique ID of the look and feel.  See the documentation for LFCustoms for further
details of how to do this.
<p>
Another option is simply to provide values for the (quite self-explanatory) keys defined as static fields
of the LFCustoms class.  The advantage to providing an implementation of LFCustoms is simply that those
values would not be loaded unless requested; either approach is equivalent.
<p>
Also, if a look and feel is designed to be an improvement on an existing platform-specific look and 
feel (such as JGoodies for Windows or QuaQua for Apple), it may simply provide the appropriate existing
LFCustoms subclass name in UIDefaults, in accordance with the following:

<table>
<caption>LFCustoms subclass</caption>
<tr>
<th>Look and feel</th>
<th>UIManager key</th>
<th>Class name</th>
</tr>


<tr>
<td>Metal look and feel</td>
<td>Nb.MetalLFCustoms</td>
<td>org.netbeans.swing.plaf.metal.MetalLFCustoms</td>
</tr>
    
<tr>
<td>Windows classic look and feel</td>
<td>Nb.WindowsLFCustoms</td>
<td>org.netbeans.swing.plaf.winclassic.WindowsLFCustoms</td>
</tr>
    
<tr>
<td>Windows XP look and feel</td>
<td>Nb.WindowsXPLFCustoms</td>
<td>org.netbeans.swing.plaf.winxp.XPLFCustoms</td>
</tr>

<tr>
<td>Aqua look and feel (Mac)</td>
<td>Nb.AquaLFCustoms</td>
<td>org.netbeans.swing.plaf.aqua.AquaLFCustoms</td>
</tr>

<tr>
<td>GTK Look and Feel (Linux &amp; Solaris) - JDK 1.5 and up</td>    
<td>Nb.GTKLFCustoms</td>
<td>org.netbeans.swing.plaf.gtk.GtkLFCustoms</td>
</tr>
</table>

For details on the specific requirements and design of this library, see its
<a href="../../../../architecture-summary.html">arch questions and answers</a>.

</body>
</html> 
